package com.ccav.hrm.service.impl;

import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.ccav.hrm.domain.CourseType;
import com.ccav.hrm.mapper.CourseTypeMapper;
import com.ccav.hrm.service.ICourseTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 课程目录 服务实现类
 * </p>
 *
 * @author yhptest
 * @since 2020-06-23
 */
@Service
public class CourseTypeServiceImpl extends ServiceImpl<CourseTypeMapper, CourseType> implements ICourseTypeService {

    @Autowired
    private CourseTypeMapper courseTypeMapper;

    @Override
    public List<CourseType> queryTreeData() {return queryTypeTree(0L);
    }

    public List<CourseType> queryTypeTree(long pid) {
        //先搞一个集合用来存放查出来的数据
        List<CourseType> result = new ArrayList<>();
        //查询整张表
        List<CourseType> allTypes = courseTypeMapper.selectList(null);
        //将这些数据以他的id为键对象为值的方式存到map中
        Map<Long,CourseType> allTypeMap = new HashMap<>();
        for (CourseType allType : allTypes) {
            allTypeMap.put(allType.getId(), allType);
        }
        //遍历所有的数据
        for (CourseType type : allTypes) {
            //将单个数据的父节点拿出来
            Long pid1 = type.getPid();
            //判断这个节点的id是否跟需要查找的顶级id相同
            if (pid1.longValue()==pid){
                //将这个节点放到需要返回的集合中
                result.add(type);
            }else{
                //如果这个节点不是顶级节点那么我们就取出他的父节点
                CourseType parent = allTypeMap.get(pid1);
                //将这个节点存到父节点中
                parent.getChildren().add(type);
            }

        }

        return result;
    }
}
